package cn.wapache.time.calendar;

import java.io.Serializable;

/**
 * 核心的方法就两个
 * 1. isTimeIncluded : 指定的时间戳是不是在当前日历链范围内
 * 2. getNextIncludedTime : 获取指定时间戳之后的在当前日历链范围内的时间戳, 如果没有上一个日历,原样返回
 * 
 * @author ykuang
 *
 */
public interface Calendar extends Serializable, Cloneable {

	String getId();
	void setId(String id);

	String getName();
	void setName(String name);
	
    /**
     * 当前日历的说明描述
     * @return null if no description was set.
     */
    String getDescription();

    /** 当前日历的说明描述 */
    void setDescription(String description);

    /** 日历处理链中的上一个日历 */
    void setBaseCalendar(Calendar baseCalendar);

    /** 日历处理链中的上一个日历 */
    Calendar getBaseCalendar();

    /** 检测指定的时间(单位毫秒)是否属于当前日历范围内 */
    boolean isTimeIncluded(long timeStamp);

    /** 获取指定的时间(单位毫秒)之后的第一个属于当前日历范围内的时间 */
    long getNextIncludedTime(long timeStamp);

    Object clone();
    
}
